home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / MS / APPLET / AppletViewer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  11.8 KB  |  517 lines

  1. package ms.applet;
  2.  
  3. import java.applet.Applet;
  4. import java.applet.AppletContext;
  5. import java.applet.AudioClip;
  6. import java.awt.Color;
  7. import java.awt.Component;
  8. import java.awt.Container;
  9. import java.awt.Event;
  10. import java.awt.Frame;
  11. import java.awt.Image;
  12. import java.awt.Toolkit;
  13. import java.awt.Window;
  14. import java.io.File;
  15. import java.io.InputStream;
  16. import java.io.PrintStream;
  17. import java.net.URL;
  18. import java.net.URLConnection;
  19. import java.util.Enumeration;
  20. import java.util.Hashtable;
  21. import java.util.Properties;
  22. import java.util.Vector;
  23. import sun.awt.image.FileImageSource;
  24. import sun.awt.image.URLImageSource;
  25.  
  26. public class AppletViewer extends Frame implements AppletContext {
  27.    int mMSApplet16;
  28.    int mCallbackQueue;
  29.    AppletThreadGroup mAppletThreadGroup;
  30.    public static String theVersion = "1.0.2";
  31.    AppletViewerPanel panel;
  32.    PrintStream statusMsgStream;
  33.    Vector mWindows;
  34.    String mImageCacheFilename;
  35.    static Hashtable audioHash = new Hashtable();
  36.    static Hashtable imgHash = new Hashtable();
  37.    static Vector appletPanels = new Vector();
  38.    private boolean mClosing;
  39.  
  40.    public static void main(String[] var0) {
  41.       String var1 = null;
  42.  
  43.       for(int var2 = 0; var2 < var0.length - 1; var2 += 2) {
  44.          if (var0[var2].equals("CODE")) {
  45.             var1 = var0[var2 + 1];
  46.             break;
  47.          }
  48.       }
  49.  
  50.       if (var1 != null) {
  51.          AppletViewer var3 = new AppletViewer(var1);
  52.          var3.execute(var0);
  53.       }
  54.    }
  55.  
  56.    public AppletViewer(String var1) {
  57.       this.statusMsgStream = System.out;
  58.       this.mAppletThreadGroup = new AppletThreadGroup(var1, this);
  59.       this.initCallbackQueue();
  60.       ((Component)this).setBackground(new Color(192, 192, 192));
  61.    }
  62.  
  63.    protected void finalize() throws Throwable {
  64.       this.uninitCallbackQueue();
  65.       super.finalize();
  66.    }
  67.  
  68.    public void execute(String[] var1) {
  69.       Hashtable var2 = this.processArgs(var1);
  70.       if (var2 != null) {
  71.          initSystemProperties(var2);
  72.          this.panel = new AppletViewerPanel(this, var2);
  73.          ((Container)this).add("Center", this.panel);
  74.          this.panel.init(this.mAppletThreadGroup);
  75.          appletPanels.addElement(this.panel);
  76.          ((Window)this).pack();
  77.          this.show();
  78.          this.showStatus(System.getProperty("appletloader.starting"));
  79.          this.panel.sendEvent(1);
  80.          this.panel.sendEvent(2);
  81.          this.panel.sendEvent(3);
  82.       }
  83.    }
  84.  
  85.    static synchronized AudioClip getAudioClipFromCache(URL var0) {
  86.       System.security.checkConnect(var0.host, var0.port);
  87.       Object var1 = (AudioClip)audioHash.get(var0);
  88.       if (var1 == null) {
  89.          audioHash.put(var0, var1 = new AppletAudioClip(var0));
  90.       }
  91.  
  92.       return (AudioClip)var1;
  93.    }
  94.  
  95.    public AudioClip getAudioClip(URL var1) {
  96.       return getAudioClipFromCache(var1);
  97.    }
  98.  
  99.    private Image getImageFromFileCache(URL var1) {
  100.       Image var2 = null;
  101.       Object var3 = null;
  102.  
  103.       try {
  104.          File var8 = this.getUrlCacheFile(var1);
  105.          if (var8 == null) {
  106.             throw new Exception("Cache filename is NULL");
  107.          }
  108.  
  109.          if (this.mImageCacheFilename != null) {
  110.             throw new Exception("Cache not null!!");
  111.          }
  112.  
  113.          this.mImageCacheFilename = var8.getAbsolutePath();
  114.          System.err.println("Loading Image from cache: " + this.mImageCacheFilename);
  115.  
  116.          try {
  117.             imgHash.put(var1, var2 = Toolkit.getDefaultToolkit().createImage(new FileImageSource(this.mImageCacheFilename)));
  118.          } catch (Exception var6) {
  119.             this.mImageCacheFilename = null;
  120.          }
  121.  
  122.          this.mImageCacheFilename = null;
  123.       } catch (Exception var7) {
  124.          this.mImageCacheFilename = null;
  125.          System.err.println("Image Exception:" + var7 + " URL:" + var1 + " Cache:" + var3);
  126.  
  127.          try {
  128.             imgHash.put(var1, var2 = Toolkit.getDefaultToolkit().createImage(new URLImageSource(var1)));
  129.          } catch (Exception var5) {
  130.          }
  131.       }
  132.  
  133.       return var2;
  134.    }
  135.  
  136.    synchronized Image getImageFromHash(URL var1) {
  137.       System.err.println("Loading image: " + var1);
  138.       System.security.checkConnect(var1.host, var1.port);
  139.       Image var2 = (Image)imgHash.get(var1);
  140.       if (var2 == null) {
  141.          if (var1.protocol.equals("https")) {
  142.             return this.getImageFromFileCache(var1);
  143.          }
  144.  
  145.          try {
  146.             URLConnection var3 = var1.handler.openConnection(var1);
  147.             InputStream var4 = var3.getInputStream();
  148.             if (var4 != null) {
  149.                System.err.println("Loading Image from URL:" + var1);
  150.                imgHash.put(var1, var2 = Toolkit.getDefaultToolkit().createImage(new URLImageSource(var1, var3)));
  151.             }
  152.          } catch (Exception var5) {
  153.             return this.getImageFromFileCache(var1);
  154.          }
  155.       }
  156.  
  157.       return var2;
  158.    }
  159.  
  160.    public Image getImage(URL var1) {
  161.       return this.getImageFromHash(var1);
  162.    }
  163.  
  164.    public Applet getApplet(String var1) {
  165.       AppletSecurity var2 = (AppletSecurity)System.security;
  166.       var1 = var1.toLowerCase();
  167.       Enumeration var3 = appletPanels.elements();
  168.  
  169.       while(var3.hasMoreElements()) {
  170.          AppletPanel var4 = (AppletPanel)var3.nextElement();
  171.          String var5 = var4.getParameter("name");
  172.          if (var5 != null) {
  173.             var5 = var5.toLowerCase();
  174.          }
  175.  
  176.          if (var1.equals(var5)) {
  177.             URL var6 = var4.getDocumentBase();
  178.             URL var7 = this.panel.getDocumentBase();
  179.             if (var7 instanceof URL && (var6.sameFile(var7) || false)) {
  180.                try {
  181.                   var6 = this.panel.getCodeBase();
  182.                   String var10001 = var6.host;
  183.                   var6 = var4.getCodeBase();
  184.                   var2.checkConnect(var10001, var6.host);
  185.                   return var4.applet;
  186.                } catch (SecurityException var8) {
  187.                }
  188.             }
  189.          }
  190.       }
  191.  
  192.       return null;
  193.    }
  194.  
  195.    public Enumeration getApplets() {
  196.       AppletSecurity var1 = (AppletSecurity)System.security;
  197.       Vector var2 = new Vector();
  198.       Enumeration var3 = appletPanels.elements();
  199.  
  200.       while(var3.hasMoreElements()) {
  201.          AppletPanel var4 = (AppletPanel)var3.nextElement();
  202.          URL var5 = var4.getDocumentBase();
  203.          URL var6 = this.panel.getDocumentBase();
  204.          if (var6 instanceof URL && (var5.sameFile(var6) || false)) {
  205.             try {
  206.                var5 = this.panel.getCodeBase();
  207.                String var10001 = var5.host;
  208.                var5 = var4.getCodeBase();
  209.                var1.checkConnect(var10001, var5.host);
  210.                var2.addElement(var4.applet);
  211.             } catch (SecurityException var7) {
  212.             }
  213.          }
  214.       }
  215.  
  216.       return var2.elements();
  217.    }
  218.  
  219.    public void showDocument(URL var1) {
  220.       this.showDocument((URL)var1, (String)null);
  221.    }
  222.  
  223.    public void showDocument(URL var1, String var2) {
  224.       if (var1 != null) {
  225.          if (var2 == null) {
  226.             var2 = "_self";
  227.          }
  228.  
  229.          this.showDocument(var1.handler.toExternalForm(var1), var2);
  230.       }
  231.    }
  232.  
  233.    private native void showDocument(String var1, String var2);
  234.  
  235.    public native void showStatus(String var1);
  236.  
  237.    void start() {
  238.       this.panel.sendEvent(3);
  239.    }
  240.  
  241.    void stop() {
  242.    }
  243.  
  244.    public boolean closing() {
  245.       return this.mClosing;
  246.    }
  247.  
  248.    public synchronized void show() {
  249.       if (!this.mClosing) {
  250.          super.show();
  251.       }
  252.  
  253.    }
  254.  
  255.    private native void terminateThreads(Thread[] var1);
  256.  
  257.    synchronized void appletClose() {
  258.       try {
  259.          this.mClosing = true;
  260.          this.killAudioClips();
  261.          Thread[] var1 = new Thread[this.mAppletThreadGroup.activeCount()];
  262.          this.mAppletThreadGroup.enumerate(var1, true);
  263.          this.terminateThreads(var1);
  264.          this.mAppletThreadGroup.destroy();
  265.          this.mAppletThreadGroup = null;
  266.          ((Component)this).hide();
  267.          ((Frame)this).dispose();
  268.          this.killWindows();
  269.          this.uninitCallbackQueue();
  270.          appletPanels.removeElement(this.panel);
  271.          this.panel = null;
  272.       } catch (Throwable var2) {
  273.          System.out.println("Throwable caught during applet termination: " + var2);
  274.       }
  275.    }
  276.  
  277.    protected void appletQuit() {
  278.       Runtime.currentRuntime.exit(0);
  279.    }
  280.  
  281.    public boolean handleEvent(Event var1) {
  282.       switch (var1.id) {
  283.          case 201:
  284.             this.appletClose();
  285.             return true;
  286.          case 203:
  287.             this.stop();
  288.             return true;
  289.          case 204:
  290.             this.start();
  291.             return true;
  292.          case 503:
  293.          case 504:
  294.          case 505:
  295.          case 506:
  296.             return super.handleEvent(var1);
  297.          case 51234:
  298.             ((Component)this).resize(((Container)this).preferredSize());
  299.             ((Container)this).validate();
  300.             return true;
  301.          default:
  302.             return super.handleEvent(var1);
  303.       }
  304.    }
  305.  
  306.    public static int countApplets() {
  307.       Vector var0 = appletPanels;
  308.       return var0.elementCount;
  309.    }
  310.  
  311.    public static void initSystemProperties(Hashtable var0) {
  312.       if (System.security == null) {
  313.          Properties var1 = new Properties(System.getProperties());
  314.          ((Hashtable)var1).put("acl.read", "+");
  315.          ((Hashtable)var1).put("acl.read.default", "");
  316.          ((Hashtable)var1).put("acl.write", "+");
  317.          ((Hashtable)var1).put("acl.write.default", "");
  318.          ((Hashtable)var1).put("browser", "Microsoft Internet Explorer");
  319.          ((Hashtable)var1).put("browser.version", "3.0");
  320.          ((Hashtable)var1).put("browser.vendor", "Microsoft");
  321.          ((Hashtable)var1).put("http.agent", "JDK/" + theVersion);
  322.          String var2 = (String)var0.get("firewallSet");
  323.          if (var2 != null) {
  324.             ((Hashtable)var1).put("trustProxy", "true");
  325.             ((Hashtable)var1).put("firewallSet", var2);
  326.             if (var2.equals("true")) {
  327.                ((Hashtable)var1).put("firewallHost", (String)var0.get("firewallHost"));
  328.                ((Hashtable)var1).put("firewallPort", (String)var0.get("firewallPort"));
  329.             }
  330.          }
  331.  
  332.          ((Hashtable)var1).put("package.restrict.access.ms", "true");
  333.          ((Hashtable)var1).put("package.restrict.definition.java", "true");
  334.          ((Hashtable)var1).put("package.restrict.definition.sun", "true");
  335.          ((Hashtable)var1).put("package.restrict.definition.ms", "true");
  336.          ((Hashtable)var1).put("java.version.applet", "true");
  337.          ((Hashtable)var1).put("java.version", "1.0.2");
  338.          ((Hashtable)var1).put("java.vendor.applet", "true");
  339.          ((Hashtable)var1).put("java.vendor", "Microsoft Corp.");
  340.          ((Hashtable)var1).put("java.vendor.url.applet", "true");
  341.          ((Hashtable)var1).put("java.vendor.url", "http://www.microsoft.com/");
  342.          ((Hashtable)var1).put("java.class.version.applet", "true");
  343.          ((Hashtable)var1).put("java.class.version", "45.3");
  344.          ((Hashtable)var1).put("os.name.applet", "true");
  345.          ((Hashtable)var1).put("os.name", "Windows");
  346.          ((Hashtable)var1).put("os.version.applet", "true");
  347.          ((Hashtable)var1).put("os.version", "3.1");
  348.          ((Hashtable)var1).put("os.arch.applet", "true");
  349.          ((Hashtable)var1).put("os.arch", "x86");
  350.          ((Hashtable)var1).put("file.separator.applet", "true");
  351.          ((Hashtable)var1).put("file.separator", "\\");
  352.          ((Hashtable)var1).put("path.separator.applet", "true");
  353.          ((Hashtable)var1).put("path.separator", ";");
  354.          ((Hashtable)var1).put("line.separator.applet", "true");
  355.          ((Hashtable)var1).put("line.separator", "\n");
  356.          ((Hashtable)var1).put("browser.applet", "true");
  357.          ((Hashtable)var1).put("browser", "MSIE 3.01");
  358.          ((Hashtable)var1).put("appletloader.nocode", "APPLET tag missing CODE parameter.");
  359.          ((Hashtable)var1).put("appletloader.notfound", "load: class %0 not found.");
  360.          ((Hashtable)var1).put("appletloader.nocreate", "load: %0 can't be instantiated.");
  361.          ((Hashtable)var1).put("appletloader.noconstruct", "load: %0 is not public or has no public constructor.");
  362.          ((Hashtable)var1).put("appletloader.death", "killed");
  363.          ((Hashtable)var1).put("appletloader.exception", "exception: %0.");
  364.          ((Hashtable)var1).put("appletloader.exception2", "exception: %0: %1.");
  365.          ((Hashtable)var1).put("appletloader.error", "error: %0.");
  366.          ((Hashtable)var1).put("appletloader.error2", "error: %0: %1.");
  367.          ((Hashtable)var1).put("appletloader.notloaded", "Init: applet not loaded.");
  368.          ((Hashtable)var1).put("appletloader.notinited", "Start: applet not initialized.");
  369.          ((Hashtable)var1).put("appletloader.notstarted", "Stop: applet not started.");
  370.          ((Hashtable)var1).put("appletloader.notstopped", "Destroy: applet not stopped.");
  371.          ((Hashtable)var1).put("appletloader.destroyed", "Applet destroyed.");
  372.          ((Hashtable)var1).put("appletloader.notdestroyed", "Dispose: applet not destroyed.");
  373.          ((Hashtable)var1).put("appletloader.disposed", "Applet disposed.");
  374.          ((Hashtable)var1).put("appletloader.notdisposed", "Load: applet not disposed.");
  375.          ((Hashtable)var1).put("appletloader.bail", "Interrupted: bailing out.");
  376.          ((Hashtable)var1).put("appletloader.filenotfound", "File not found when looking for: %0");
  377.          ((Hashtable)var1).put("appletloader.fileformat", "File format exception when loading: %0");
  378.          ((Hashtable)var1).put("appletloader.fileioexception", "I/O exception when loading: %0");
  379.          ((Hashtable)var1).put("appletloader.fileexception", "%0 exception when loading: %1");
  380.          ((Hashtable)var1).put("appletloader.filedeath", "%0 killed when loading: %1");
  381.          ((Hashtable)var1).put("appletloader.fileerror", "%0 error when loading: %1");
  382.          if (System.security != null) {
  383.             System.security.checkPropertiesAccess();
  384.          }
  385.  
  386.          System.props = var1;
  387.          if (System.security == null) {
  388.             try {
  389.                AppletSecurity var3 = new AppletSecurity();
  390.                if (System.security != null) {
  391.                   throw new SecurityException("SecurityManager already set");
  392.                } else {
  393.                   System.security = var3;
  394.                }
  395.             } catch (SecurityException var4) {
  396.             }
  397.          }
  398.       }
  399.    }
  400.  
  401.    Hashtable processArgs(String[] var1) {
  402.       if ((var1.length & 1) != 0) {
  403.          return null;
  404.       } else {
  405.          Hashtable var2 = new Hashtable();
  406.  
  407.          for(int var3 = 0; var3 < var1.length; var3 += 2) {
  408.             var2.put(var1[var3].toLowerCase(), var1[var3 + 1]);
  409.          }
  410.  
  411.          String var4 = (String)var2.get("codebase");
  412.          String var5 = var4.toLowerCase();
  413.          if (!var5.startsWith(".zip", var5.count - ".zip".count) && !var4.startsWith("/", var4.count - "/".count)) {
  414.             var4 = var4 + "/";
  415.             var2.put("codebase", var4);
  416.          }
  417.  
  418.          var5 = (String)var2.get("proxyhttp");
  419.          String var6 = null;
  420.          String var7 = null;
  421.          if (var5 != null) {
  422.             try {
  423.                var5 = var5.substring(7, var5.count - 1);
  424.                int var8 = var5.indexOf(58, 0);
  425.                var6 = var5.substring(0, var8);
  426.                int var9 = var8 + 1;
  427.                var7 = var5.substring(var9, var5.count);
  428.             } catch (StringIndexOutOfBoundsException var10) {
  429.                var5 = null;
  430.             }
  431.  
  432.             if (var5 != null) {
  433.                var2.put("firewallSet", "true");
  434.                var2.put("firewallHost", var6);
  435.                var2.put("firewallPort", var7);
  436.             }
  437.          }
  438.  
  439.          return var2;
  440.       }
  441.    }
  442.  
  443.    public File getUrlCacheFile(URL var1) {
  444.       return this.getUrlCacheFile(var1.handler.toExternalForm(var1));
  445.    }
  446.  
  447.    public File getUrlCacheFile(String var1) {
  448.       return new File(this.getUrlCacheFileName(var1));
  449.    }
  450.  
  451.    private native String getUrlCacheFileName(String var1);
  452.  
  453.    public int getCallbackQueue() {
  454.       return this.mCallbackQueue;
  455.    }
  456.  
  457.    private native void initCallbackQueue();
  458.  
  459.    private native void uninitCallbackQueue();
  460.  
  461.    public void registerWindow(Window var1) {
  462.       if (var1 != null) {
  463.          if (this.mWindows == null) {
  464.             this.mWindows = new Vector();
  465.          } else {
  466.             Vector var2 = this.mWindows;
  467.             if (var2.indexOf(var1, 0) >= 0 || false) {
  468.                return;
  469.             }
  470.          }
  471.  
  472.          this.mWindows.addElement(var1);
  473.       }
  474.    }
  475.  
  476.    private void killWindows() {
  477.       if (this.mWindows != null) {
  478.          Vector var1 = this.mWindows;
  479.          int var4 = var1.elementCount;
  480.  
  481.          for(int var2 = 0; var2 < var4; ++var2) {
  482.             Window var3 = (Window)this.mWindows.elementAt(var2);
  483.             ((Component)var3).hide();
  484.             var3.dispose();
  485.          }
  486.  
  487.          this.mWindows.removeAllElements();
  488.          this.mWindows = null;
  489.       }
  490.    }
  491.  
  492.    private void killAudioClips() {
  493.       Enumeration var1 = audioHash.elements();
  494.  
  495.       while(var1.hasMoreElements()) {
  496.          AudioClip var2 = (AudioClip)var1.nextElement();
  497.          var2.stop();
  498.       }
  499.  
  500.       audioHash.clear();
  501.    }
  502.  
  503.    private static native AppletViewer getAppletViewerBySystemThread();
  504.  
  505.    public static AppletViewer getAppletViewer() {
  506.       Thread var0 = Thread.currentThread();
  507.  
  508.       for(ThreadGroup var1 = var0.group; var1 != null; var1 = var1.parent) {
  509.          if (var1 instanceof AppletThreadGroup) {
  510.             return ((AppletThreadGroup)var1).getAppletViewer();
  511.          }
  512.       }
  513.  
  514.       return getAppletViewerBySystemThread();
  515.    }
  516. }
  517.